package game.ouroboros.traps;

import framework.GameObject;
import game.ouroboros.enemy.Enemy;
import game.ouroboros.magic.World;

//deixei getters e setters mas nem sei se precisa 
public abstract class Trap extends GameObject {
	public int damAtk; // dano causado pelo ataque
	protected float atkPerSec; // ataques por segundo
	protected int rAtk; // raio de ataque
	public int type; // elemento a que pertence 1- fogo 2-agua 3-raio 4-terra
						// 5-vento
	// Trap level indica qual o nível da armadilha, type level o nível do efeito
	// do elemento dela
	protected byte trapLevel;
	protected byte typeLevel;

	public byte sizeUnitRight;
	public byte sizeUnitLeft;
	public byte sizeUnitUP;
	public byte sizeUnitDown;

	public boolean isSolid;// os personagens nﾃ｣o podem passar pela armadilha

	private boolean alive;

	public Trap(float x, float y, float width, float height) {
		super(x, y, width, height);
		this.sizeUnitDown = 0;
		this.sizeUnitRight = 0;
		this.sizeUnitUP = 0;
		this.sizeUnitLeft = 0;
		this.isSolid = true;
		this.alive = false;
	}

	protected void setDamAtk(int val) {
		this.damAtk = val;
	}

	public int getDamAtk() {
		return this.damAtk;
	}

	protected void setRAtak(int val) {
		this.rAtk = val;
	}

	public int getRAtk() {
		return this.rAtk;
	}

	public void setTAtk(int val) {
		this.atkPerSec = val;
	}

	public float getTAtk() {
		return this.atkPerSec;
	}

	public int getType() {
		return type;
	}

	// faz upgrade na armadilha
	public void upgrade() {
		if (this.trapLevel == 0 && World.mana >= World.CUSTO * 3) {
			this.trapLevel++;
			this.typeLevel += 2;
			this.damAtk += this.damAtk * 1.5;
		} else if (this.trapLevel == 1 && World.mana >= World.CUSTO * 12) {
			this.trapLevel++;
			this.typeLevel += 2;
			this.damAtk += this.damAtk * 1.5;
		}
	}

	abstract public boolean funcionando();

	abstract public boolean inCollisionRange(Enemy enemy);

	abstract public void attackedBy(Enemy enemy);

	public void initialize() {
		this.alive = true;
	}
}
